#include "../header/common.h"
#include <time.h>
#include <SDL/SDL_ttf.h>

#define MAXBALLS 1
#define MAXOBJECTS 6

void data(int a, char dateiname[20])
{/* es wird entweder 1 oder 0 in dateigeschrieben um name ode rip zu speichern*/ 
  FILE *datei;
  char tmp[50];
  int l;
  
  datei = fopen (dateiname, "r");
  fscanf (datei, "%s", tmp);
  fclose(datei);
  
if(a)  tmp[0]='1';
  else tmp[0]='0';
  l=strlen(tmp);
  
tmp[strlen(tmp)] = '\0';
  
  datei = fopen (dateiname, "w");
  fprintf (datei, "%s",tmp);      
  fclose (datei);

}
void data2(char name[50],char dateiname[20])
{/*name oder ip wird in datei gespeichert*/
  FILE *datei;
  char tmp[50];
  int i,l;
  
  datei = fopen (dateiname, "r");
  fscanf (datei, "%s", tmp);
  fclose(datei);
 
  l=strlen(name);
 
  for(i=1;i<l+1;i++)
    {tmp[i]=name[i-1];}

    
  tmp[strlen(name)+1] = '\0';

  datei = fopen (dateiname, "w");
  fprintf (datei, "%s",tmp);      
  fclose (datei);

}
int breite(char buchstabe,TTF_Font *font)
{int weight;char tmp[2];
  tmp[0]=buchstabe;tmp[1]=0;
SDL_Color color = { 2,2,2};
SDL_Surface* textSurface =  TTF_RenderText_Blended(font, tmp, color);
 weight=textSurface->w;
 return weight;
}
void namenzeichen(SDL_Surface *screen,int A[100],int S[2],int T[4],char tmp[50],char Name[50],TTF_Font *font)
{int i,xtmp=T[0],weight; 
   
  for (i=1;i<strlen(tmp);i++)
      {
	Name[i-1]=tmp[i];
	weight=breite(tmp[i],font);
	A[i+1]=weight;
	
	stringmalen(screen,font,Name,i-1 ,i, xtmp,  T[1]);
	xtmp=xtmp+weight;
      }

Name[i-1]=0;

  A[0]=xtmp;
  A[1]=strlen(tmp)-1;
  
  
}
int name(SDL_Surface *screen,int mode)
{ 
  SDL_Surface *name, *button[6],*strich,*temp;
  
  SDL_Event event;
  SDL_Rect rect[5],text,curser;  
  int i,done=0,click=0,crux=0,A[100]={0},S[2]={0},T[4]={0},font_size,textfeld=0,muh=0,muh1=0;
  TTF_Font *font;
  SDL_MouseMotionEvent mm;
  SDL_MouseButtonEvent mb;
  char Name[50];
  FILE *datei;
  char tmp[50];
	char dateiname[20]="tmp-name.txt";
  if(TTF_Init()==-1)
   {
      printf("TTF_Init: %s\n", TTF_GetError());
      
   } 
  /* bilder und auflösungsabhängige werte werden geladen */
  switch(screen->w)
    {
    case 640:
      name=SDL_LoadBMP("image/640480/name.bmp");   
      button[0]=SDL_LoadBMP("image/640480/buttons/abbrechen1.bmp");
      button[3]=SDL_LoadBMP("image/640480/buttonspressed/abbrechen2.bmp");
      button[1]=SDL_LoadBMP("image/640480/buttons/weiter1.bmp");
      button[4]=SDL_LoadBMP("image/640480/buttonspressed/weiter2.bmp");
      button[2]=SDL_LoadBMP("image/640480/kreuz1.bmp");
      button[5]=SDL_LoadBMP("image/640480/kreuz2.bmp");
      strich=SDL_LoadBMP("image/640480/strich0.bmp");
       temp=SDL_LoadBMP("image/640480/temp.bmp"); 

     
      
      font_size=16;
      rect[4].x=160;rect[4].y=120;
      rect[0].x=190;rect[0].y=255;rect[0].w=button[0]->w;rect[0].h=button[0]->h;
      rect[1].x=330;rect[1].y=255;rect[1].w=button[1]->w;rect[1].h=button[1]->h;
      rect[2].x=280;rect[2].y=190;rect[2].w=button[2]->w;rect[2].h=button[2]->h;
      rect[3].x=333;rect[3].y=165;rect[3].w=122;rect[3].h=14;
      curser.x=333;curser.y=165;
      break;
    case 800:
      name=SDL_LoadBMP("image/800600/name.bmp");   
      button[0]=SDL_LoadBMP("image/800600/buttons/abbrechen1.bmp");
      button[3]=SDL_LoadBMP("image/800600/buttonspressed/abbrechen2.bmp");
      button[1]=SDL_LoadBMP("image/800600/buttons/weiter1.bmp");
      button[4]=SDL_LoadBMP("image/800600/buttonspressed/weiter2.bmp");
      button[2]=SDL_LoadBMP("image/800600/kreuz1.bmp");
      button[5]=SDL_LoadBMP("image/800600/kreuz2.bmp");
      strich=SDL_LoadBMP("image/800600/strich0.bmp");   
      temp=SDL_LoadBMP("image/800600/temp.bmp");  
      
      font_size=16;      
      rect[4].x=200;rect[4].y=150;
      rect[0].x=238;rect[0].y=319;rect[0].w=button[0]->w;rect[0].h=button[0]->h;
      rect[1].x=416;rect[1].y=319;rect[1].w=button[1]->w;rect[1].h=button[1]->h; 
      rect[2].x=350;rect[2].y=238;rect[2].w=button[2]->w;rect[2].h=button[2]->h;   
      
      rect[3].x=416;rect[3].y=206;rect[3].w=140;rect[3].h=14;     
      curser.x=416;curser.y=205;      
      break;

    case 1024:
      name=SDL_LoadBMP("image/1024768/name.bmp");   
      button[0]=SDL_LoadBMP("image/1024768/buttons/abbrechen1.bmp");
      button[3]=SDL_LoadBMP("image/1024768/buttonspressed/abbrechen2.bmp");
      button[1]=SDL_LoadBMP("image/1024768/buttons/weiter1.bmp");
      button[4]=SDL_LoadBMP("image/1024768/buttonspressed/weiter2.bmp");
      button[2]=SDL_LoadBMP("image/1024768/kreuz1.bmp");
      button[5]=SDL_LoadBMP("image/1024768/kreuz2.bmp");
      strich=SDL_LoadBMP("image/1024768/strich0.bmp");   
      temp=SDL_LoadBMP("image/1024768/temp.bmp");   
      font_size=20;
      rect[4].x=256;rect[4].y=192;
      rect[0].x=305;rect[0].y=408;rect[0].w=button[0]->w;rect[0].h=button[0]->h;
      rect[1].x=532;rect[1].y=408;rect[1].w=button[1]->w;rect[1].h=button[1]->h;  
      rect[2].x=448;rect[2].y=305;rect[2].w=button[2]->w;rect[2].h=button[2]->h; 
      curser.x=532;curser.y=272;
      rect[3].x=532;rect[3].y=268;rect[3].w=179;rect[3].h=20;
      break;
    }
  SDL_Color color={255,255,255};
  /*fenster wird gezeichnet */
  
 font=TTF_OpenFont("arial.ttf",font_size-2);

  A[0]=rect[3].x;
  S[0]=rect[3].x;
  T[0]=rect[3].x;
  T[1]=rect[3].y;
  T[2]=rect[3].w;
  T[3]=font_size;

 SDL_SetAlpha(temp, SDL_SRCALPHA | SDL_RLEACCEL, 200);

  SDL_BlitSurface(temp,NULL,screen,NULL); 
SDL_SetColorKey(name, SDL_SRCCOLORKEY, SDL_MapRGB(name->format, 0, 0, 255));
  SDL_BlitSurface(name,NULL,screen,&rect[4]);
  SDL_BlitSurface(button[0],NULL,screen,&rect[0]);
  SDL_BlitSurface(button[1],NULL,screen,&rect[1]);
  SDL_BlitSurface(button[2],NULL,screen,&rect[2]);
 SDL_FillRect(screen,&rect[3],SDL_MapRGB(screen->format,0,0,0));
  SDL_BlitSurface(strich,NULL,screen,&curser);
  
  /* datei wird ausgelesen, ob name gespeichert wurde */
datei = fopen (dateiname, "r");
  fgets(tmp, 50, datei);
  fclose(datei);
  crux=tmp[0]-48;
  
  if(crux)
    {/* wenn ja wird name gezeichnet */
      namenzeichen(screen,A,S,T,tmp,Name,font);    
      SDL_BlitSurface(button[5],NULL,screen,&rect[2]);
    }
    

  muh=SDL_EnableKeyRepeat(500,20);
  SDL_EnableUNICODE(1); 
  /* evenetschleife wird gestartet */
  while(!done)
    {
      if(textfeld)
	{/*cursor blinken */
	  if(muh1>4)
	   {
	     SDL_BlitSurface(strich,NULL,screen,&curser);
	     muh++;
	   }
	 else muh1++;
	 if(muh>4)
	   {
	     SDL_FillRect(screen,&curser,SDL_MapRGB(screen->format,0,0,0));
	     muh1=0;
	     muh=0;
	   }
       }

  while (SDL_PollEvent(&event))
    {
      switch(event.type)
	{
	case SDL_QUIT:
	  done = 1;
	  break;
	  /*tastenevents werden verarbeitet*/
	case SDL_KEYDOWN:
	  if(textfeld)
	    {
	      if((event.key.keysym.unicode>=32)&&(event.key.keysym.unicode<=126)|(event.key.keysym.unicode>=160)&&(event.key.keysym.unicode<=255))
		{ bschreiben2(screen,event.key.keysym.unicode,font,Name,A,S,0,255,0,T);
		  SDL_FillRect(screen,&curser,SDL_MapRGB(screen->format,0,0,0));
		  curser.x=S[0];}
	    }
	  switch(event.key.keysym.sym)
	       {
	       case SDLK_ESCAPE:
		 done=1;
		 break;
		 /* löschen*/
	       case SDLK_BACKSPACE:
		 if((S[1]!=0)&&(textfeld))
		   {loeschen(screen,font,Name, A, S,0,T);
		     curser.x=S[0];}		 
		 break;
		 
	       case SDLK_DELETE:
		 if((S[1]<A[1])&&(textfeld)) 
		   {loeschen(screen,font,Name, A, S,1,T);
		     curser.x=S[0];}	 
		 break;
		 /* cursorbewegung*/
	       case SDLK_LEFT:
		 if((S[1]>0)&&(textfeld))
		   { 
		     curserbewegen(Name,A,S,-1,T);
		     SDL_FillRect(screen,&curser,SDL_MapRGB(screen->format,0,0,0));
		     curser.x=S[0];
		   }break;
	       case SDLK_RIGHT:
		 if((S[1]<A[1])&&(textfeld))
		   {
		     curserbewegen(Name,A,S,1,T);
		     SDL_FillRect(screen,&curser,SDL_MapRGB(screen->format,0,0,0));
		     curser.x=S[0];
		   }break;
	       }
	  /* mousebewegung für mousoverbutton*/
	case SDL_MOUSEMOTION:
	  mm=event.motion;	  
	  for(i=0;i<2;i++)
	    {
	      click=click_button(rect[i],mm.x,mm.y);
	     switch(click)
	      {
	      case 0:
		SDL_BlitSurface(button[i],NULL,screen,&rect[i]);
		  break;
	      case 1:
		SDL_BlitSurface(button[i+3],NULL,screen,&rect[i]);
		break;
	      }
	    }
	  break;
	  /*mouseclick wird ausgewertet*/  
	case SDL_MOUSEBUTTONDOWN:
	  mb=event.button;
	  for(i=0;i<4;i++)
	    {
	      click=click_button(rect[i],mb.x,mb.y);
	      if(click)
		{
		  switch(i)
		    {
		    case 0:
		      done=1;
		      break;
		    case 1:/*name werden in datei geschrieben und nächstes fenster wird aufgerufen*/
		      if(crux) data2(Name,dateiname);		      
		      if(mode==1){if(singleplayer(screen,mode,Name))return 1;}
                      else online(screen,mode,Name);
                      done=1;		      
			break;
		      
		    case 2:
		      if(!crux)
		      {
			SDL_BlitSurface(button[5],NULL,screen,&rect[2]);
			crux=1;data(1,dateiname);
		      }
		    else 
		      {
			SDL_BlitSurface(button[2],NULL,screen,&rect[2]);
			crux=0;data(0,dateiname);
		      }
		      break;
		    case 3:/* es wird in textfeld geklickt und es somit aktiviert*/
		      textfeld=1;
		      curserclick(Name,A,S,T,mb.x);
		    SDL_FillRect(screen,&curser,SDL_MapRGB(screen->format,0,0,0));
		    curser.x=S[0];
		    }
		}  
	      else
		{
		  textfeld=0;
		  SDL_BlitSurface(strich,NULL,screen,&curser);
		}
	    }break;
	 
	  
	}
    }
  
  SDL_Flip(screen);
  SDL_Delay(100);
   }
  /*bilder werden wieder freigegeben */
  SDL_FreeSurface(name);
  SDL_FreeSurface(button[0]);
  SDL_FreeSurface(button[1]);
  SDL_FreeSurface(button[2]);
  SDL_FreeSurface(button[3]);
  SDL_FreeSurface(button[4]);
  SDL_FreeSurface(button[5]);
  SDL_FreeSurface(strich);

 return 0;   
}

